Work tasks can be placed in one or more queues for task performers to take out of the queues and process. Depending on the need, different numbers of task performers can be assigned to process tasks in a given queue. One simple scheme to determine which tasks are removed from a queue by a task performer is “first in/first out” where the first task into the queue is processed before the second task is processed. However, this simple scheme is not flexible and it is difficult to guarantee a level performance. In particular, some tasks may require that they stay in the queue no longer than a certain prescribed amount of time. Also, different queues for different purposes require different behaviors. It would be useful if a queue could be flexible to the differing behaviors required by different queues, queue purposes, and tasks.